Instantiation Restrictions
An interface cannot normally be instantiated because it defines a contract rather than a complete concrete object implementation. An abstract class cannot be instantiated because it may contain abstract operations whose behavior is intentionally incomplete. The runtime needs a concrete type with all required behavior defined before it can create a normal object. However, a reference of interface or abstract-class type can point to a concrete implementing or derived object.
Interfaces represent contracts rather than directly constructible concrete objects.
Abstract classes can contain incomplete behavior.
Concrete subclasses provide the missing behavior.
Interface and abstract-class references can still point to concrete objects.
This supports abstraction and runtime polymorphism.